From: Florian Müllner Date: Sun, 24 Jul 2022 18:12:54 +0000 (+0200) Subject: status/nightLight: Use promise to initialize proxy X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~461^2^2~215 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=80e4ae7d7f996361b77f1e20d1553d3c2a7d1cc2;p=gnome-shell.git status/nightLight: Use promise to initialize proxy There's no good reason for waiting for the proxy to be initialized to connect signals. In fact, connecting the signal beforehand ensures that the handler is in place when the proxy fetches the properties, so we don't have to call the handler explicitly. That in turn will allow us in a follow-up to rely on the signal parameters to only process changed properties. To achieve that, construct the proxy manually, and then initialize it asynchronously in a Promise. Part-of: --- diff --git a/js/ui/status/nightLight.js b/js/ui/status/nightLight.js index c595c3da0..109fe6791 100644 --- a/js/ui/status/nightLight.js +++ b/js/ui/status/nightLight.js @@ -1,7 +1,7 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* exported Indicator */ -const { Gio, GObject } = imports.gi; +const {Gio, GLib, GObject} = imports.gi; const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; @@ -13,7 +13,7 @@ const BUS_NAME = 'org.gnome.SettingsDaemon.Color'; const OBJECT_PATH = '/org/gnome/SettingsDaemon/Color'; const ColorInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Color'); -const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface); +const colorInfo = Gio.DBusInterfaceInfo.new_for_xml(ColorInterface); var Indicator = GObject.registerClass( class Indicator extends PanelMenu.SystemIndicator { @@ -22,16 +22,17 @@ class Indicator extends PanelMenu.SystemIndicator { this._indicator = this._addIndicator(); this._indicator.icon_name = 'night-light-symbolic'; - this._proxy = new ColorProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, - (proxy, error) => { - if (error) { - log(error.message); - return; - } - this._proxy.connect('g-properties-changed', - this._sync.bind(this)); - this._sync(); - }); + + this._proxy = new Gio.DBusProxy({ + g_connection: Gio.DBus.session, + g_name: BUS_NAME, + g_object_path: OBJECT_PATH, + g_interface_name: colorInfo.name, + g_interface_info: colorInfo, + }); + this._proxy.connect('g-properties-changed', () => this._sync()); + this._proxy.init_async(GLib.PRIORITY_DEFAULT, null) + .catch(e => console.error(e.message)); this._item = new PopupMenu.PopupSubMenuMenuItem("", true); this._item.icon.icon_name = 'night-light-symbolic';